\tikzstyle{rec} = [draw, minimum width=8.1em, minimum height=2.5em] % 方形node
\tikzstyle{ell} = [draw, shape=ellipse, minimum width=8.1em, minimum height=2.5em] % 椭圆形node
\tikzstyle{arr} = [->] % 箭头
\definecolor{lightyellow}{RGB}{255, 254, 208}
\begin{tikzpicture}
    
    % 第一层
    \node[rec] (高级语言1) at (0,0) {高级语言1};
    \node[ell, anchor=west] (转换程序) at ([xshift=7em]高级语言1.east) {转换程序};
    \node[rec, anchor=west] (高级语言2) at ([xshift=7em]转换程序.east) {高级语言2};
    \node[anchor=east] (I) at ([xshift=-3em]高级语言1.west) {I.}; %\textbf{}
    \draw[arr] (高级语言1.east) -- (转换程序.west);
    \draw[arr] (转换程序.east) -- (高级语言2.west) ;
    \begin{pgfonlayer}{background}
        \node[fill=lightyellow, fit=(高级语言1) (转换程序) (高级语言2) (I)]{};
    \end{pgfonlayer}

    % 第二层
    \newcommand{\shiftOne}{-5em} % 第一层和第二层之间的偏移 
    \node[ell,anchor=west] (解释程序) at ([xshift=0em, yshift=\shiftOne]高级语言1.west) {解释程序};
    \node[ell,anchor=west] (编译程序2) at ([xshift=1.96em]解释程序.east) {编译程序1}; %这里调转了
    \node[ell,anchor=west] (编译程序1) at ([xshift=1.96em]编译程序2.east) {编译程序2};
    \node[ell,anchor=east] (反编译程序) at ([yshift=\shiftOne]高级语言2.east) {反编译程序};
    \draw[arr] ([xshift=0em]高级语言1.south) -- (解释程序.north);
    \draw[arr] ([xshift=0em]高级语言1.south) -- (编译程序2.north);
    \draw[arr] ([xshift=0em]高级语言1.south) -- (编译程序1.north);
    \draw[arr] (反编译程序.north) -- (高级语言1.south east);
    
    % 第三层
    \newcommand{\shiftTwo}{-5em} % 第二层和第三层之间的偏移 
    \node[rec] (汇编语言) at ([yshift=\shiftTwo+\shiftOne]转换程序) {汇编语言};
    \node[anchor=west] (II) at ([xshift=0em,yshift=\shiftTwo + \shiftOne]I.west) {II.}; %\textbf{}
    \node[rec, transparent] (占位1) at ([yshift=\shiftTwo + \shiftOne]高级语言2) {占位占位1};
    \draw[arr] (编译程序1.south) -- (汇编语言.north);
    \draw[arr] (汇编语言.30) -- (反编译程序.south);
    \begin{pgfonlayer}{background}
        \node[fill=lightyellow, fit=(汇编语言) (II) (占位1)]{};
    \end{pgfonlayer}

    % 第四层 yshift=-3
    \newcommand{\shiftThree}{-5em} % 第三层和第四层之间的偏移 
    \node[ell] (汇编程序) at ([yshift=\shiftThree]汇编语言) {汇编程序};
    \node[ell,anchor=east] (反汇编程序) at ([yshift=\shiftThree+\shiftTwo]反编译程序.east) {反汇编程序};
    \draw[arr] (汇编语言.south) -- (汇编程序.north);
    \draw[arr] (反汇编程序.north) -- (汇编语言.330);
    
    % 第五层 yshift=-3
    \newcommand{\shiftFour}{-5em} % 第四层和第五层之间的偏移 
    \node[rec] (机器语言) at ([yshift=\shiftFour]汇编程序) {机器语言};
    \node[anchor=west] (III) at ([xshift=0em,yshift=\shiftFour + \shiftThree]II.west) {III.}; %\textbf{}
    \node[rec,transparent] (占位2) at ([yshift=\shiftFour + \shiftThree]占位1) {占位占位2};
    \draw[arr] (解释程序.south) -- (机器语言.west);
    \draw[arr] (汇编程序) -- (机器语言.north);
    \draw[arr] (机器语言.east) -- (反汇编程序.south);
    \draw[arr] (编译程序2.240) -- (机器语言.north west);
    \begin{pgfonlayer}{background}
        \node[fill=lightyellow, fit=(III) (机器语言) (占位2)]{};
    \end{pgfonlayer}

\end{tikzpicture}